﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AdminCondominio.Persistencia;
using AdminCondominio.Dominio;

namespace AdminCondominio.Negocio
{
    public class CuotaService
    {

        //Dependencias con la capa de persistencia
        public ViviendaDAO ViviendaDAO { get; set; }
        public CuotaDAO CuotaDAO { get; set; }
        
        
        public Cuota RegistrarCuota(Cuota value)
        {
            //Validar que la vivienda exista
            Vivienda vivienda = ViviendaDAO.ObtenerVivienda(value.Vivienda.CoVivienda);
            if (vivienda == null)
                throw new Exception("Vivienda inexistente");
            if (vivienda.CoVivienda == 0)
                throw new Exception("Código de vivienda no válido");                       

            //Validar que no se halla registrado una cuota para esa vivienda en ese periodo
            Cuota cuota = CuotaDAO.obtener(value.Vivienda.CoVivienda, value.TxPeriodo);
            if (!(cuota == null))
                throw new Exception("Cuota existente para esta vivienda en este periodo");

            //Registrar la cuota para la vivienda
            return CuotaDAO.Crear(value);
        }

        public ICollection<Cuota> ConsultarCuotasPendientesxVivienda(int CoVivienda,string estado)
        {
            //Validar que la vivienda exista
            Vivienda vivienda = ViviendaDAO.ObtenerVivienda(CoVivienda);
            if (vivienda == null)
                throw new Exception("Vivienda inexistente");
            if (vivienda.CoVivienda == 0)
                throw new Exception("Código de vivienda no válido");

            return CuotaDAO.listarCuotasPendientes(CoVivienda, estado);
        }


        public ICollection<Cuota> PagarCuota(Cuota value)
        {
            //Validar que la vivienda exista
            Vivienda vivienda = ViviendaDAO.ObtenerVivienda(value.Vivienda.CoVivienda);
            if (vivienda == null)
                throw new Exception("Vivienda inexistente");
            if (vivienda.CoVivienda == 0)
                throw new Exception("Código de vivienda no válido");

            //Validar que no se halla sido cancelada anteriormente
            Cuota cuota = null;
            cuota = CuotaDAO.obtener(value.Vivienda.CoVivienda, value.TxPeriodo);
            if (cuota == null)
                throw new Exception("Cuota inexistente");
            if (cuota.Estado.Trim().Equals("C"))
                throw new Exception("La cuota ya fue cancelada");

            //Registrar la cuota para la vivienda
            return CuotaDAO.modificar(value);
        }


        public Cuota ObtenerCuota(int CoVivienda, string TxPeriodo)
        {
            return CuotaDAO.obtener(CoVivienda, TxPeriodo);
        }

        public List<Vivienda> ListarCuotaxResidente(string CoResidente)
        {
            return CuotaDAO.ListarCuotaxResidente(CoResidente);
        }

    }
}